D) Lvalue & Rvalue Reference

Lvalue
단일 표현식 이후에도 없어지지 않고 지속되는 객체
Rvalue
표현식이 종료된 이후에는 더이상 존재하지 않는 임시적인 값
#include <iostream>
#include <string>
using namespace std;
int main(void){
int x=3; // 3 is Rvalue
const int y=x;
int z=x+y; // x+y is Rvalue
int* p=&x; // &x is Rvalue
cout<<string("one"); // string("one") is Rvalue
++x;
x++; // x++ is Rvalue
}
++x는 증가된 x 자신을 리턴하기 대문에 Lvalue 이지만,
x++는 증가된 복사본을 리턴하기 때문에 Rvalue이다.
& 연산자는 Lvalue를 참조한다.
&(++x);
&(x++); // error C2102: '&' requires l-value
&& 연산자는 Rvalue를 참조한다.(C++11 이상)
int rvalue(){
return 10;
}
int main(void){
int lvalue=10;
int& a=lvalue;
int&& c=rvalue(); // 10
}